/**
 * 应用配置文件
 * 根据不同环境提供不同的配置
 */

// 环境类型定义
export type Environment = 'local' | 'dev' | 'prod';

// 配置接口定义
export interface AppConfig {
  apiBaseUrl: string; // API基础地址
  appTitle: string; // 应用标题
  environment: Environment; // 当前环境
  isDevelopment: boolean; // 是否为开发环境
  isProduction: boolean; // 是否为生产环境
  tokenKey: string; // Token存储键名
  timeout: number; // 请求超时时间（毫秒）
}

// 获取当前环境
const getEnvironment = (): Environment => {
  const env = process.env.UMI_ENV || process.env.NODE_ENV;
  
  switch (env) {
    case 'local':
      return 'local';
    case 'dev':
    case 'development':
      return 'dev';
    case 'prod':
    case 'production':
      return 'prod';
    default:
      return 'local';
  }
};

// 不同环境的配置
const configs: Record<Environment, Partial<AppConfig>> = {
  // 本地开发环境配置
  local: {
    apiBaseUrl: 'http://localhost:3001/api',
    appTitle: '城市生命线管理系统(本地)',
    timeout: 10000,
  },
  
  // 开发环境配置
  dev: {
    apiBaseUrl: 'http://192.168.110.7:8888/',
    appTitle: '城市生命线管理系统(开发环境)',
    timeout: 15000,
  },
  
  // 生产环境配置
  prod: {
    apiBaseUrl: 'https://api.citylifeline.com/api',
    appTitle: '城市生命线管理系统',
    timeout: 20000,
  },
};

// 当前环境
const currentEnv = getEnvironment();

// 基础配置
const baseConfig: AppConfig = {
  environment: currentEnv,
  isDevelopment: currentEnv !== 'prod',
  isProduction: currentEnv === 'prod',
  tokenKey: 'city_lifeline_token',
  apiBaseUrl: '',
  appTitle: '',
  timeout: 10000,
};

// 合并配置
const config: AppConfig = {
  ...baseConfig,
  ...configs[currentEnv],
};

// 导出配置
export default config;

// 导出常用配置项
export const {
  apiBaseUrl,
  appTitle,
  environment,
  isDevelopment,
  isProduction,
  tokenKey,
  timeout,
} = config;

// 工具函数：获取完整的API地址
export const getApiUrl = (path: string): string => {
  // 确保path以/开头
  const normalizedPath = path.startsWith('/') ? path : `/${path}`;
  return `${apiBaseUrl}${normalizedPath}`;
};

// 工具函数：获取Token
export const getToken = (): string | null => {
  return localStorage.getItem(tokenKey);
};

// 工具函数：设置Token
export const setToken = (token: string): void => {
  localStorage.setItem(tokenKey, token);
};

// 工具函数：清除Token
export const clearToken = (): void => {
  localStorage.removeItem(tokenKey);
};

// 工具函数：检查是否已登录
export const isAuthenticated = (): boolean => {
  return !!getToken();
};

// 调试信息（仅在开发环境输出）
if (isDevelopment) {
  console.log('🚀 应用配置信息:', {
    environment: currentEnv,
    apiBaseUrl,
    appTitle,
    isDevelopment,
    isProduction,
  });
}